/**
 * 560. 和为 K 的子数组
 * https://leetcode-cn.com/problems/subarray-sum-equals-k/
 */

/**
 * 前缀和 + 哈希表
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
function subarraySum(nums, k) {
  const map = new Map();
  map.set(0, 1);
  let pre = 0;
  let sum = 0;
  let target = 0;
  let count = 0;
  for (let i = 0; i < nums.length; i += 1) {
    sum = nums[i] + pre;
    target = sum - k;
    if (map.has(target)) {
      count += map.get(target);
    }
    map.set(sum, (map.get(sum) || 0) + 1);
    pre = sum;
  }
  return count;
}

console.log(subarraySum([1, 1, 1], 2) === 2);
console.log(subarraySum([1, 2, 3], 3) === 2);
